// 平铺数组

// 第一种方法
function flatter(arr) {
    if (!Array.isArray(arr)) {
        throw new Error('传参必须是一个数组')
    }
    const res = [];
    function run(arr1) {
        arr1.forEach(item=>{
            if(Array.isArray(item)){
                run(item)
            }else{
                res.push(item)
            }
        })

    }
    run(arr);
    return res;
}

// 闭包优化第一种方式
let flatter2 = (function () {
    const res = [];
    return function run(arr) {
        if (!Array.isArray(arr)) {
            throw new Error('传参必须是一个数组')
        }
        arr.forEach(item=>{
            if(Array.isArray(item)){
                run(item)
            }else{
                res.push(item)
            }
        })
        return res;
    }
})();


// 同理展开json对象
const flatterJson = (function(){
    const res = [];
    return function run(obj){
        for(let key in obj){
            if(obj[key].child){
                run(obj[key].child)
            }else{
                res.push(obj[key])
            }
        }
        return res;
    }
})() 
 

const arr = [1, [2, [3, [4,{}]]]];
// console.log(flatter(arr));
console.log(flatter2(arr));

const obj = {
    name:'teset10',
    child:{
        name:'test2',
        child:{
            name:'test3',
            child:{}
        }
    }
}
console.log(flatterJson(obj))